事件其实就是阻塞所有进程,让所有的进程进入等待的状态

from multiprocessing import Event

e = Event()
e.wait(5)  # 得到一个标识,表示的默认状态就是阻塞,如果传了一个数字进去就代表只阻塞5秒,如果不传一直阻塞着
e.set()  # 将标识变成非阻塞状态
e.clear()  # 将标识变成阻塞状态
e.is_set() # 判断是否为非阻塞 返回值: True: 非阻塞 False: 阻塞

1. 红绿灯例子

  • 每隔3秒进行红绿灯的切换
  • 每次绿灯都会通过一定随机数量的车辆

import random
import time
from multiprocessing import Process
from multiprocessing import Event


# 红绿灯切换进程
def traffic_light(e):
    while True:
        if e.is_set():  # 判断是否为非阻塞
            time.sleep(3)
            print('红灯亮')
            e.clear()  # 将标识设置为阻塞
        else:
            time.sleep(3)
            print('绿灯亮')
            e.set()  # 将标识设置为非阻塞


# 汽车通过进程
def car(i, e):
    e.wait()  # 设置标识状态,根据状态对所有进程进行阻塞
    print('%s车通过' % i)


if __name__ == '__main__':
    e = Event()  # 立了一个红绿灯
    tra = Process(target=traffic_light, args=(e,))
    tra.start()  # 执行红绿灯切换进程

    for i in range(100):
        if i % 6 == 0:
            time.sleep(random.randint(1, 3))  # 设置延时,每次通过随机数量的车辆
        car_pro = Process(target=car, args=(i, e))
        car_pro.start()  # 汽车通过进程